package com.yjz.aiagent.rag;

import org.springframework.ai.chat.client.advisor.RetrievalAugmentationAdvisor;
import org.springframework.ai.chat.client.advisor.api.Advisor;
import org.springframework.ai.rag.retrieval.search.DocumentRetriever;
import org.springframework.ai.rag.retrieval.search.VectorStoreDocumentRetriever;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.ai.vectorstore.filter.Filter;
import org.springframework.ai.vectorstore.filter.FilterExpressionBuilder;

/**
 * @author YJZ
 * @Description 创建RAG的检索增强顾问
 */
public class LoveAppRagCustomerAdvisorFactory {

    /**
     * 创建自定义的RAG 检索增强顾问
     *
     * @param vectorStore
     * @param status
     * @return
     */
    public static Advisor createLoveAppRagCustomerAdvisor(VectorStore vectorStore, String status) {

        // 过滤表达式
        Filter.Expression expression = new FilterExpressionBuilder()
                .eq("status", status)
                .build();

        // 使用向量数据库的文档检索器
        DocumentRetriever documentRetriever = VectorStoreDocumentRetriever.builder()
                .vectorStore(vectorStore)
                // 使用过滤表达式
                .filterExpression(expression)
                //  相似度阈值
                .similarityThreshold(0.5)
                // 搜索返回的文档数量
                .topK(30)
                .build();

        return RetrievalAugmentationAdvisor.builder()
                // 文档检索器
                .documentRetriever(documentRetriever)
                // 文档增强器
                .queryAugmenter(LoveAppContextualQueryAugmenterFactory.createInstance())
                .build();
    }

}
